home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Miscellaneous / Headlines Code / Misc Headers ƒ / ATMInterface.h next >
Text File  |  1991-12-26  |  34KB  |  697 lines

  1. /*
  2.  * ATMInterface.h
  3.  *
  4.  * Version 3.0
  5.  *
  6.  * Adobe Type Manager is a trademark of Adobe Systems Incorporated.
  7.  * Copyright 1983-1991 Adobe Systems Incorporated.
  8.  * All Rights Reserved.
  9.  */
  10.  
  11. #ifndef _H_ATMInterface
  12. #define _H_ATMInterface
  13.  
  14. /*
  15.  * This defines which language calling conventions you wish to use for the
  16.  * "pre-3.0" calls with ATM 3.0. For example, do you want the field "fontAvailable"
  17.  * a C or Pascal routine? If you wish this to be a PASCAL routine always, use
  18.  *        #define ATM_LANG    pascal
  19.  * We don't advise doing this unless you are guaranteed that the ATM you will
  20.  * be working with will _always_ be ATM 3.0 or greater!  But, you MUST do this
  21.  *if you request ATMPascalProcsStatusCode instead of ATMProcsStatusCode.
  22.  */
  23. #ifndef ATM_LANG
  24. #define ATM_LANG    ATM_C
  25. #endif
  26.  
  27. /*
  28.  * Does your compiler support function prototypes in structure fields? If so, we
  29.  * will supply them for you. Older versions of Think C (pre-5.0) don't and will give
  30.  * error messages for prototyping function pointers in structs, so you will want
  31.  * to turn this off.
  32.  */
  33. #ifndef ATM_USE_PROTOTYPES
  34. #    if !defined(THINK_C) || THINK_C == 5
  35. #        define ATM_USE_PROTOTYPES    1
  36. #    else
  37. #        define ATM_USE_PROTOTYPES    0
  38. #    endif
  39. #endif
  40.  
  41. /*
  42.  * Think C 4.0 (THINK_C == 1) doesn't allow the "pascal" keyword in function pointers
  43.  * in structs.
  44.  */
  45. #ifndef ATM_C
  46. #define ATM_C
  47. #endif
  48. #ifndef ATM_PASCAL
  49. #    if !defined(THINK_C) || THINK_C == 5
  50. #        define ATM_PASCAL    pascal
  51. #    else
  52. #        define ATM_PASCAL
  53. #    endif
  54. #endif
  55.  
  56. #define    MaxLegalBlendName    31            /* Maximum size of a legal font name (w/o len).    */
  57. #define    MaxBlendEntries        16            /* Max entries in a blend vector.                */
  58. #define    MaxBlendAxes        4            /* Can specify 4 dimensions.                    */
  59.  
  60. #define WeightAxis    (StringPtr) "\pWeight"    /* Weight axis identifier.                    */
  61. #define WidthAxis    (StringPtr) "\pWidth"    /* Width axis identifier.                    */
  62.  
  63. /* For the "method" parameter of CopyFit. */
  64. enum {
  65.     ATMCopyFitDefault,                    /* Let us choose the best method for H&J.        */
  66.     ATMCopyFitConstStems,                /* Keep the stem widths constant.                */
  67.     ATMCopyFitVarStems                    /* Allow stem widths to vary.                    */
  68. };
  69.  
  70. typedef long ATMFixed;
  71.  
  72. typedef short ATMErr;
  73.  
  74. /*
  75.  * For MPW users who don't want to use the ATMInterface.a glue routines:
  76.  * you must use ATMPascalProcsStatusCode.  This in turn requires that you
  77.  *        #define ATM_LANG pascal
  78.  * (as described above) before #include'ing ATMInterface.h.
  79.  */
  80. #define ATMProcsStatusCode             0
  81. #define ATMPascalProcsStatusCode     16
  82. #define ATMPickerControlCode        10
  83.  
  84. /* Return codes from GetBlendedFontType                                                    */
  85. #define    ATMNotBlendFont                0
  86. #define    ATMBlendFontInstance        1
  87. #define    ATMBlendFontBaseDesign        2
  88. #define ATMTempBlendFont            3
  89.  
  90. typedef struct
  91.     {
  92.     ATMFixed a, b, c, d, tx, ty;
  93.     } ATMFixedMatrix;
  94.  
  95. typedef struct 
  96.     {
  97.       ATMFixed x, y;
  98.     } ATMFixedPoint, *ATMPFixedPoint;
  99.  
  100. /*
  101.  * This structure is filled via getFontSpecsATM() and gives additional information
  102.  * about the current font than we can get from just the FOND. Make sure that the
  103.  * appropriate bits are set when the fields are filled in, and the "SpecsReserved"
  104.  * is initialized to zero!
  105.  *
  106.  * As of the 3.0 release, only the vertical stem width and xheight are used,
  107.  * though the cap height might be used if the xheight is not available. This structure
  108.  * is designed to be expandable as needed in the future.
  109.  *
  110.  * The version number MUST be zero...
  111.  */
  112. #define FontSpecsVersion    0
  113. typedef struct FontSpecs {
  114.     short    version;                    /* Must be zero (0).                    */
  115.     Boolean    vertStemWidthAvail : 1;        /* Signals that data is available.        */
  116.     Boolean    horizStemWidthAvail : 1;
  117.     Boolean    xHeightAvail : 1;
  118.     Boolean    capHeightAvail : 1;
  119.     Boolean    serifWidthAvail : 1;
  120.     Boolean    serifHeightAvail : 1;
  121.     long    SpecsReserved : 26;            /* Must be initialized to zero (0)!        */
  122.     Fixed    SpecsVertStemWidth;            /* Thickness of the vertical stems.        */
  123.     Fixed    SpecsHorizStemWidth;        /* Thickness of the horizontal stems.    */
  124.     Fixed    SpecsxHeight;                /* The height of the letter 'x'.        */
  125.     Fixed    SpecsCapHeight;                /* The height of a capital letter.        */
  126.     Fixed    SpecsSerifWidth;            /* The width of a serif.                */
  127.     Fixed    SpecsSerifHeight;            /* The height of a serif, ie. how tall    */
  128.                                         /* are the tips off the base line.        */
  129. } FontSpecs;
  130.  
  131. /*
  132.  * Creator/Picker option flags
  133.  */
  134. #define CREATOR_DIALOG    0x0001    /* Creator dialog, else Picker dialog */
  135. #define OK_IS_QUIT        0x0002    /* Ok button title becomes Quit */
  136.  
  137. #if ATM_USE_PROTOTYPES
  138. typedef ATM_PASCAL short (*MMFPHook)(short item, DialogPtr theDialog);
  139. #else
  140. typedef ProcPtr    MMFPHook;
  141. #endif
  142.  
  143. /*
  144.  * Multiple Master Font Picker parameters
  145.  *
  146.  * All strings are Pascal format.
  147.  *
  148.  * The MMFP_Parms apply to both the Font Picker and Font Creator dialogs.
  149.  * Set the CREATOR_DIALOG bit in "flags" to get the Creator rather than the
  150.  * Picker dialog.  Use "where" to specify the dialog's position, or use [0,0]
  151.  * to get the standard positioning.  Pass in your own "prompt" string or use 
  152.  * NULL to get the standard prompt.  Pass in your own "sample" string or use
  153.  * NULL to get the standard sample.  The sample string is continuously redrawn
  154.  * to illustrate the current font as the user navigates through the Multiple
  155.  * Master design space.  A short fragment of the user's selection in the
  156.  * current document is a reasonable alternative to the default sample text.
  157.  * The user is also able to type in the sample box to see other characters.
  158.  * Pass in your own sample "startSize" or use 0 to get the default initial 
  159.  * sample size.  The user can also adjust the sample size through a popup
  160.  * menu and type-in size box.  Pass in your own "dlgHook" dialog event hook
  161.  * function if you wish to change the dialog behavior or add your own items.
  162.  * If you specify a "dlgHook", it is called by the Picker immediately after
  163.  * each call to ModalDialog().  Refer to the Standard File Package chapter of
  164.  * Inside Mac for more details on how to write and use a dialog hook routine.
  165.  * Despite their different appearances, both the Creator and Picker dialogs
  166.  * share the same item numbering.
  167.  *
  168.  * When the Picker or Creator dialog is first displayed, the family and 
  169.  * instance popup menus and the sliders and axis values are all set to reflect
  170.  * the initial font, and the sample string is rendered in this font at the 
  171.  * initial sample size.  There are a number of ways to choose this initial font.
  172.  * If "startFondID" is a Multiple Master font then it is used as the initial
  173.  * font.  If "startFondID" is -1 or a regular (non-Multiple Master) font, then
  174.  * "startFamilyName" is checked.  If this is the name of a Multiple Master
  175.  * font, then the instance at "startCoords" is used as the initial font.
  176.  * "StartCoords" must have as many elements as there are design axes for
  177.  * the specified family.  If "startCoords" is NULL, then the first instance
  178.  * in "startFamilyName" is used as the initial font.  If "startFamilyName"
  179.  * is NULL, then "startCoords" is ignored and the default initial font is
  180.  * chosen.
  181.  */
  182. struct MMFP_Parms
  183. {
  184.     short        version;            /* (in) always 1 */
  185.     short        flags;                /* (in) option flags, 0 for default Picker dialog */
  186.     Point        where;                /* (in) dialog's top-left corner, [0,0] for default */
  187.     StringPtr    prompt;                /* (in) prompt string, NULL for default */
  188.     StringPtr    sample;                /* (in) sample string, NULL for default */
  189.     short        startFondID;        /* (in) initial font, -1 for none */
  190.     StringPtr    startFamilyName;    /* (in) initial family, NULL for default */
  191.     Fixed        *startCoords;        /* (in) initial axis coordinates, NULL for default */
  192.     short        startSize;            /* (in) initial sample size, 0 for default */
  193.     MMFPHook     dlgHook;            /* (in) application dialog hook function, NULL for none */
  194. };
  195. typedef struct MMFP_Parms        MMFP_Parms, *MMFP_ParmsPtr;
  196.  
  197. /*
  198.  * Multiple Master Font Picker Reply
  199.  *
  200.  * All strings are Pascal format.
  201.  *
  202.  * While the user manipulates the Picker or Creator dialog's controls to
  203.  * navigate through the Multiple Master design space, the sample text is
  204.  * continuously rerendered in the font instance with the selected design
  205.  * coordinates.  A temporary instance is created on the fly whenever a
  206.  * permanent instance does not already exist.  Only the permanent instances
  207.  * remain when the dialog is dismissed.  The Creator dialog has only an
  208.  * OK button while the Picker dialog has both OK and Cancel.  (For both
  209.  * dialogs, OK can be retitled Quit using the OK_IS_QUIT flag bit).  The
  210.  * Picker call returns ATM_NOERR (0) for OK, and ATM_PICKER_CANCELLED for 
  211.  * Cancel.  Regardless of the way the user dismisses the dialog, any fields 
  212.  * specified in MMFP_Reply are filled in to reflect the state in which the 
  213.  * user last left the dialog.
  214.  *
  215.  * Any pointer argument specified as NULL is ignored.  The others are always
  216.  * filled in.  Specify "sample" to get a copy of the user's current sample
  217.  * text string.  Specify "familyName" to get the name of the current
  218.  * Multiple Master family.  Specify "coords" to get an array of design
  219.  * coordinates for the current instance.  "Coords" will contain "numAxes"
  220.  * elements.  Use MaxBlendAxes to safely allocate an array long enough for
  221.  * the returned coordinates.  If the font instance corresponding to these
  222.  * design coordinates was a permanent one, its ID is returned in "fondID".
  223.  * If the instance was a temporary one, it no longer exists, so "fondID" is 
  224.  * set to -1.  The calling program may make appropriate ATM calls to create
  225.  * a new temporary or permanent instance of that font using the family name
  226.  * and design coordinates.
  227.  */
  228. struct MMFP_Reply
  229. {
  230.     StringPtr    sample;                /* (out) last sample string (Str255), NULL to ignore */
  231.     short        fondID;                /* (out) selected font if permanent, else -1 */
  232.     StringPtr    familyName;            /* (out) selected family (Str32), NULL to ignore */
  233.     short        numAxes;            /* (out) number of design axes in selected family */
  234.     Fixed        *coords;            /* (out) coords of selected instance, NULL to ignore */
  235.     short        size;                /* (out) last sample size */
  236. };
  237. typedef struct MMFP_Reply        MMFP_Reply, *MMFP_ReplyPtr;
  238.  
  239. #if ATM_USE_PROTOTYPES
  240. #    define ATM_PROTO7(a,b,c,d,e,f,g)    (a,b,c,d,e,f,g)
  241. #    define ATM_PROTO6(a,b,c,d,e,f)        (a,b,c,d,e,f)
  242. #    define ATM_PROTO5(a,b,c,d,e)        (a,b,c,d,e)
  243. #    define ATM_PROTO4(a,b,c,d)            (a,b,c,d)
  244. #    define ATM_PROTO3(a,b,c)            (a,b,c)
  245. #    define ATM_PROTO2(a,b)                (a,b)
  246. #    define ATM_PROTO1(a)                (a)
  247. #else
  248. #    define ATM_PROTO7(a,b,c,d,e,f,g)    ()
  249. #    define ATM_PROTO6(a,b,c,d,e,f)        ()
  250. #    define ATM_PROTO5(a,b,c,d,e)        ()
  251. #    define ATM_PROTO4(a,b,c,d)            ()
  252. #    define ATM_PROTO3(a,b,c)            ()
  253. #    define ATM_PROTO2(a,b)                ()
  254. #    define ATM_PROTO1(a)                ()
  255. #endif
  256.  
  257. #define ATMProcs3Version 3
  258. typedef struct
  259.     {
  260.     long version;
  261.     short (*fontAvailable) ATM_PROTO2(short family, short style);
  262.     short (*showText) ATM_PROTO3(Byte *text, short length, ATMFixedMatrix *matrix);
  263.     short (*xyshowText) ATM_PROTO4(Byte *text, short length, ATMFixedMatrix *matrix, Fixed *displacements);
  264.     } ATMProcs3;
  265.  
  266. #define ATMProcs4Version 4
  267. typedef struct
  268.     {
  269.     long version;
  270.     short (*fontAvailable) ATM_PROTO2(short family, short style);
  271.     short (*showTextErr) ATM_PROTO4(Byte *text, short length, ATMFixedMatrix *matrix, short *errorCode);
  272.     short (*xyshowTextErr) ATM_PROTO5(Byte *text, short length, ATMFixedMatrix *matrix, 
  273.                     Fixed *displacements, short *errorCode);
  274.     short (*getOutline) ATM_PROTO7(short c, ATMFixedMatrix *matrix, Ptr clientHook,
  275.                     short (*MoveTo)(Ptr clientHook, ATMPFixedPoint pc), 
  276.                     short (*LineTo)(Ptr clientHook, ATMPFixedPoint pc), 
  277.                     short (*CurveTo)(Ptr clientHook, ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3), 
  278.                     short (*ClosePath)(Ptr clientHook));    
  279.     short (*startFill) ATM_PROTO1(void);
  280.     short (*fillMoveTo) ATM_PROTO1(ATMPFixedPoint pc);
  281.     short (*fillLineTo) ATM_PROTO1(ATMPFixedPoint pc);
  282.     short (*fillCurveTo) ATM_PROTO3(ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3);
  283.     short (*fillClosePath) ATM_PROTO1(void);
  284.     short (*endFill) ATM_PROTO1(void);
  285.     } ATMProcs4;
  286.  
  287. #define ATMProcs5Version 5
  288. /*
  289.  * Note for version 5 and above.
  290.  *
  291.  * All the routines new for version 5 have pascal interfaces.
  292.  * Depending on how the interface is initialized, the older routines may or may not be
  293.  * pascal interface. 
  294.  */
  295. typedef struct
  296.     {
  297.     long version;
  298.     ATM_LANG short (*fontAvailable) ATM_PROTO2(short family, short style);
  299.     ATM_LANG short (*showTextErr) ATM_PROTO4(Byte *text, short length, ATMFixedMatrix *matrix, ATMErr *errorCode);
  300.     ATM_LANG short (*xyshowTextErr) ATM_PROTO5(Byte *text, short length, ATMFixedMatrix *matrix, 
  301.                     Fixed *displacements, ATMErr *errorCode);
  302.     ATM_LANG short (*getOutline) ATM_PROTO7(short c, ATMFixedMatrix *matrix, Ptr clientHook,
  303.                     short (*MoveTo)(Ptr clientHook, ATMPFixedPoint pc), 
  304.                     short (*LineTo)(Ptr clientHook, ATMPFixedPoint pc), 
  305.                     short (*CurveTo)(Ptr clientHook, ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3), 
  306.                     short (*ClosePath)(Ptr clientHook));    
  307.     ATM_LANG short (*startFill) ATM_PROTO1(void);
  308.     ATM_LANG short (*fillMoveTo) ATM_PROTO1(ATMPFixedPoint pc);
  309.     ATM_LANG short (*fillLineTo) ATM_PROTO1(ATMPFixedPoint pc);
  310.     ATM_LANG short (*fillCurveTo) ATM_PROTO3(ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3);
  311.     ATM_LANG short (*fillClosePath) ATM_PROTO1(void);
  312.     ATM_LANG short (*endFill) ATM_PROTO1(void);
  313.     
  314.     /* New for version 5 -- control functions for use with control panel (&testing). */
  315.     ATM_PASCAL void (*disable) ATM_PROTO1(void);
  316.     ATM_PASCAL void (*reenable) ATM_PROTO1(void);
  317.  
  318.     /* New for version 5 (with blended fonts */
  319.     ATM_PASCAL short (*getBlendedFontType) ATM_PROTO2(StringPtr fontName, short fondID);
  320.     ATM_PASCAL ATMErr (*encodeBlendedFontName) ATM_PROTO4(StringPtr familyName, short numAxes,
  321.                     Fixed *coords, StringPtr blendName);
  322.     ATM_PASCAL ATMErr (*decodeBlendedFontName) ATM_PROTO5(StringPtr blendName, StringPtr familyName,
  323.                     short *numAxes, Fixed *coords, StringPtr displayInstanceStr);
  324.     ATM_PASCAL ATMErr (*addMacStyleToCoords) ATM_PROTO4(Fixed *coords, short macStyle, Fixed *newCoords, short *stylesLeft);
  325.     ATM_PASCAL ATMErr (*convertCoordsToBlend) ATM_PROTO2(Fixed *coords, Fixed *weightVector);
  326.     ATM_PASCAL ATMErr (*normToUserCoords) ATM_PROTO2(Fixed *normalCoords, Fixed *coords);
  327.     ATM_PASCAL ATMErr (*userToNormCoords) ATM_PROTO2(Fixed *coords, Fixed *normalCoords);
  328.     ATM_PASCAL ATMErr (*createTempBlendedFont) ATM_PROTO3(short numAxes, Fixed *coords, short *useFondID);
  329.     ATM_PASCAL ATMErr (*disposeTempBlendedFont) ATM_PROTO1(short fondID);
  330.     ATM_PASCAL ATMErr (*createPermBlendedFont) ATM_PROTO4(StringPtr fontName, short fontSize, short fontFileID, short *retFondID);
  331.     ATM_PASCAL ATMErr (*disposePermBlendedFont) ATM_PROTO1(short fondID);
  332.     ATM_PASCAL ATMErr (*getTempBlendedFontFileID) ATM_PROTO1(short *fileID);
  333.     ATM_PASCAL ATMErr (*getNumAxes) ATM_PROTO1(short *numAxes);
  334.     ATM_PASCAL ATMErr (*getNumMasters) ATM_PROTO1(short *numMasters);
  335.     ATM_PASCAL ATMErr (*getMasterFOND) ATM_PROTO2(short i, short *masterFOND);
  336.     ATM_PASCAL ATMErr (*copyFit) ATM_PROTO6(short method, Fixed TargetWidth, Fixed *beginCoords,
  337.                     Fixed *baseWidths, Fixed *resultWidth, Fixed *resultCoords);
  338.     ATM_PASCAL ATMErr (*getFontSpecs) ATM_PROTO1(FontSpecs *hints);
  339.     ATM_PASCAL void (*private1) ATM_PROTO1(void);
  340.     ATM_PASCAL void (*private2) ATM_PROTO1(void);
  341.     ATM_PASCAL ATMErr (*showTextDesign) ATM_PROTO7(StringPtr fontFamily, Byte *text, short len, ATMFixedMatrix *matrix,
  342.                     Fixed *coords, Fixed *displacements, short *lenDisplayed);
  343.     ATM_PASCAL ATMErr (*getAxisBlendInfo) ATM_PROTO6(short axis, short *userMin, short *userMax,
  344.                     StringPtr type, StringPtr label, StringPtr shortLabel);
  345.     ATM_PASCAL ATMErr (*fontFit) ATM_PROTO7(Fixed *origCoords, short numTargets, short *varyAxes,
  346.                     Fixed *targetMetrics, Fixed **masterMetrics,
  347.                     Fixed *retCoords, Fixed *retWeightVector);
  348.     ATM_PASCAL ATMErr (*getNumBlessedFonts) ATM_PROTO1(short *numBlessedFonts);
  349.     ATM_PASCAL ATMErr (*getBlessedFontName) ATM_PROTO3(short i, StringPtr blessedFontName, Fixed *coords);
  350.     ATM_PASCAL ATMErr (*getRegularBlessedFont) ATM_PROTO1(short *regularIndex);
  351.     ATM_PASCAL ATMErr (*flushCache) ATM_PROTO1(void);
  352.     ATM_PASCAL ATMErr (*getFontFamilyFOND) ATM_PROTO2(StringPtr familyName, short *retFondID);
  353.     ATM_PASCAL ATMErr (*MMFontPicker) ATM_PROTO2(MMFP_Parms *parms, MMFP_Reply *reply);
  354.     ATM_PASCAL ATMErr (*spare01) ATM_PROTO1(void);        /* expansion */
  355.     ATM_PASCAL ATMErr (*spare02) ATM_PROTO1(void);        /* expansion */
  356.     ATM_PASCAL ATMErr (*spare03) ATM_PROTO1(void);        /* expansion */
  357.     ATM_PASCAL ATMErr (*spare04) ATM_PROTO1(void);        /* expansion */
  358.     ATM_PASCAL ATMErr (*spare05) ATM_PROTO1(void);        /* expansion */
  359.     ATM_PASCAL ATMErr (*spare06) ATM_PROTO1(void);        /* expansion */
  360.     ATM_PASCAL ATMErr (*spare07) ATM_PROTO1(void);        /* expansion */
  361.     ATM_PASCAL ATMErr (*spare08) ATM_PROTO1(void);        /* expansion */
  362.     ATM_PASCAL ATMErr (*spare09) ATM_PROTO1(void);        /* expansion */
  363.     ATM_PASCAL ATMErr (*spare10) ATM_PROTO1(void);        /* expansion */
  364.     ATM_PASCAL ATMErr (*spare11) ATM_PROTO1(void);        /* expansion */
  365.     ATM_PASCAL ATMErr (*spare12) ATM_PROTO1(void);        /* expansion */
  366.     ATM_PASCAL ATMErr (*spare13) ATM_PROTO1(void);        /* expansion */
  367.     ATM_PASCAL ATMErr (*spare14) ATM_PROTO1(void);        /* expansion */
  368.     ATM_PASCAL ATMErr (*spare15) ATM_PROTO1(void);        /* expansion */
  369.     ATM_PASCAL ATMErr (*spare16) ATM_PROTO1(void);        /* expansion */
  370.     ATM_PASCAL ATMErr (*spare17) ATM_PROTO1(void);        /* expansion */
  371.     ATM_PASCAL ATMErr (*spare18) ATM_PROTO1(void);        /* expansion */
  372.     ATM_PASCAL ATMErr (*spare19) ATM_PROTO1(void);        /* expansion */
  373.     ATM_PASCAL ATMErr (*spare20) ATM_PROTO1(void);        /* expansion */
  374.     } ATMProcs5;
  375.  
  376. #define LATEST_VERSION ATMProcs5Version
  377. #define LATEST_PROCS ATMProcs5
  378.  
  379. /* **************** The following routines are available under ATMProcs3Version: **************** */
  380.  
  381. /* Initializes ATMInterface for a given version, returns 1 if and only if that version
  382.     of the ATM interface is available */
  383. short initVersionATM(short);
  384.  
  385. /* Returns 1 if and only if ATM can image the specified family and style */
  386. short fontAvailableATM(short family, short style);
  387.  
  388. /* Show length characters starting at text transformed by the specified matrix */
  389. /* Returns the number of characters not shown */
  390. /* Matrix maps one point character space to device space, relative to current pen position */
  391. /* Matrix's tx and ty components are updated */
  392. short showTextATM(Byte *text, short length, ATMFixedMatrix *matrix);
  393.  
  394. /* Show length characters starting at text transformed by the specified matrix */
  395. /* Matrix maps one point character space to device space, relative to current pen position */
  396. /* Matrix's tx and ty components are updated */
  397. /* Character x and y widths are specified by displacements */
  398. /* Returns the number of characters not shown */
  399. short xyshowTextATM(Byte *text, short length, ATMFixedMatrix *matrix, ATMFixed *displacements);
  400.  
  401. /* ****************************** end of ATMProcs3Version routines ****************************** */
  402.  
  403. /* **************** The following routines are available under ATMProcs4Version: **************** */
  404.  
  405. /* Initializes ATMInterface for a given version, returns 1 if and only if that version
  406.     of the ATM interface is available */
  407. short initVersionATM(short);
  408.  
  409. /* Returns 1 if and only if ATM can image the specified family and style */
  410. short fontAvailableATM(short family, short style);
  411.  
  412. /* These error codes are returned by the routines below: */
  413. #define ATM_NOERR            (0)        /* Normal return */
  414. #define ATM_NO_VALID_FONT    (-1)    /* can't find an outline font, or found a bad font - note that
  415.                                      * ATMGetOutline requires an outline font
  416.                                      * with exactly the current GrafPort's style(s) */
  417. #define ATM_CANTHAPPEN        (-2)    /* Internal ATM error */
  418. #define ATM_BAD_MATRIX        (-3)    /* Matrix inversion undefined or matrix too big */
  419. #define ATM_MEMORY            (-4)    /* Ran out of memory */
  420. #define ATM_WRONG_VERSION    (-5)    /* currently installed ATM driver doesn't support this interface */
  421. #define ATM_NOT_ON            (-6)    /* the ATM driver is missing or has been turned off */
  422. #define ATM_FILL_ORDER        (-7)    /* inconsistent fill calls, e.g. ATMFillMoveTo() without ATMStartFill() */
  423. #define ATM_CANCELLED        (-8)    /* the client halted an operation, e.g. a callback from ATMGetOutline returned 0 */
  424. #define ATM_NO_CHAR            (-9)    /* the font does not have an outline for this character code */
  425. #define ATM_BAD_LENGTH        (-10)    /* ATMShowText() or ATMxyShowText() was called with length argument <= 0 or > 255 */
  426. #define ATM_PIC_SAVE         (-11)
  427. #define    ATM_NOT_BLENDED_FONT (-12)    /* This font is not a blended font. */
  428. #define    ATM_BASEDESIGN        (-13)    /* This operation is not allowed on a base design (eg. deleting FOND). */
  429. #define    ATM_TEMPFONT_PROB    (-14)    /* We had a problem working with a temporary font. */
  430. #define ATM_ILL_OPER        (-15)    /* Can't perform this operation on this font. */
  431. #define ATM_FONTFIT_FAIL    (-16)    /* FontFit() failed (also from CopyFit()!). */
  432. #define ATM_MISS_BASEDESIGN    (-17)    /* Missing base design FOND. */
  433. #define ATM_NO_BLENDED_FONTS (-18)    /* no Multiple Master fonts installed */
  434. #define ATM_PICKER_CANCELLED (-19)    /* user hit Picker/Creator "Cancel" button */
  435. #define ATM_CREATE_FONT_FAIL (-20)    /* general font creation failure */
  436. #define ATM_DISK_FULL        (-21)    /* out of disk space */
  437. #define ATM_WRITE_PROTECTED    (-22)    /* volume or file is locked */
  438. #define ATM_IO_ERROR        (-23)    /* I/O error */
  439.  
  440. /* Show length characters starting at text transformed by the specified matrix */
  441. /* Returns the number of characters not shown */
  442. /* Matrix maps one point character space to device space, relative to current pen position */
  443. /* Matrix's tx and ty components are updated */
  444. /* *errorCode is set to ATM_NOERR if all went well, otherwise to one of the above error codes */
  445. short showTextATMErr(Byte *text, short length, ATMFixedMatrix *matrix, short *errorCode);
  446.  
  447. /* Show length characters starting at text transformed by the specified matrix */
  448. /* Matrix maps one point character space to device space, relative to current pen position */
  449. /* Matrix's tx and ty components are updated */
  450. /* Character x and y widths are specified by displacements */
  451. /* Returns the number of characters not shown */
  452. /* *errorCode is set to ATM_NOERR if all went well, otherwise to one of the above error codes */
  453. short xyshowTextATMErr(Byte *text, short length, ATMFixedMatrix *matrix, ATMFixed *displacements, short *errorCode);
  454.  
  455. /* Get, via call-back procs, the PostScript definition of a character outline */
  456. /* The call-backs should return 1 if they wish to continue being called for the remainder */
  457. /* of the current character; they should return 0 if they wish to terminate getOutlineATM */
  458. /* Returns ATM_NOERR if successful, otherwise one of the ATM error codes */
  459. /* Matrix maps one point character space to device space */
  460. short getOutlineATM(short c, ATMFixedMatrix *matrix, Ptr clientHook,
  461.                     short (*MoveTo)(/* Ptr clientHook, ATMPFixedPoint pc */), 
  462.                     short (*LineTo)(/* Ptr clientHook, ATMPFixedPoint pc */), 
  463.                     short (*CurveTo)(/* Ptr clientHook, ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3 */), 
  464.                     short (*ClosePath)(/* Ptr clientHook */));
  465.  
  466. /* Render the specified path according to the graphic state implicit in the current GrafPort */
  467. /* All these routines return ATM_NOERR if successful, otherwise one of the ATM error codes */
  468.  
  469. short startFillATM(void);
  470. short fillMoveToATM(ATMPFixedPoint pc);
  471. short fillLineToATM(ATMPFixedPoint pc);
  472. short fillCurveToATM(ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3);
  473. short fillClosePathATM(void);
  474. short endFillATM(void);
  475.  
  476. /* ****************************** end of ATMProcs4Version routines ****************************** */
  477.  
  478.  
  479. /* **************** The following routines are available under ATMProcs5Version: **************** */
  480.  
  481. /* Returns TRUE if the specified font is a multi-master or "blended" font. */
  482. /* Uses the "fontName" if not NULL, otherwise looks at the fondID. */
  483. short getBlendedFontTypeATM(StringPtr fontName, short fondID);
  484.  
  485. /*
  486.  * Given a "familyName" (eg. "Minion") and coordinates in the design space, create
  487.  * a blended font name. This really isn't implemented well as it doesn't add labels (yet).
  488.  */
  489. ATMErr encodeBlendedFontNameATM(StringPtr familyName, short numAxes,
  490.                 Fixed *coords, StringPtr blendName);
  491.  
  492. /*
  493.  * Given a "Blended" fontName (eg. "Minion_67 BLD 2 CND"), return coordinates
  494.  * in the design space and the font's family name. The "family name" is really
  495.  * just the stuff before the '_' (eg. "Minion"), and the display instance string
  496.  * is the stuff afterwards (eg. "67 BLD 2 CND"). The "family name" could be
  497.  * "AdobeSans", "Adobe Sans" or "AdobeSan", as the only criteria is that the
  498.  * PostScript filename ("AdobeSan") can be derived from it according to the
  499.  * 533 rule (use first 5 letters from the first word, and first 3 letters from
  500.  * every word afterwards.
  501.  *
  502.  * You may pass NULL for any of the return parameters.
  503.  *
  504.  */
  505. ATMErr decodeBlendedFontNameATM(StringPtr blendName, StringPtr familyName,
  506.                 short *numAxes, Fixed *coords, StringPtr displayInstanceStr);
  507.  
  508. /*
  509.  * When the BOLD bit is set on a multiple master font, we may add a calculated amount
  510.  * to the WEIGHT axis (if any). This routines returns the new coordinates for any given
  511.  * Mac style for this font. Note that a font designer may not choose to modify the
  512.  * coordinates for the Bold, Condensed or Expanded bits, so these will return unchanged.
  513.  *
  514.  * Whatever styles a blended font design can't handle is returned in "stylesLeft", though
  515.  * these styles might be handled by QuickDraw (like Outline, Shadow, etc).
  516.  */
  517. ATMErr    addMacStyleToCoordsATM(Fixed *coords, short macStyle, Fixed *newCoords, short *stylesLeft);
  518.  
  519. /*
  520.  * Convert the design coordinates for the current font to a blend vector. This is necessary
  521.  * for those who need to output PostScript directly—this is suitable for passing to 
  522.  * the PostScript operator "makeBlendedFont".
  523.  */
  524. ATMErr convertCoordsToBlendATM(Fixed *coords, Fixed *weightVector);
  525.  
  526. /*
  527.  * Convert the design coordinates to a range usermin..usermax instead of 0.0..1.0.
  528.  */
  529. ATMErr normToUserCoordsATM(Fixed *normalCoords, Fixed *coords);
  530.  
  531. /*
  532.  * Convert the design coordinates to a range 0.0..1.0 instead of usermin..usermax.
  533.  */
  534. ATMErr userToNormCoordsATM(Fixed *coords, Fixed *normalCoords);
  535.  
  536. /*
  537.  * Create a temporary blended font for user interface purposes (so users can choose a blend). 
  538.  * The first time, initialize "*useFondID" to zero and a new fondID will be returned. 
  539.  * While displaying various blends, use the returned value in "*useFondID" until the user 
  540.  * is satisfied. Then dispose of this font with disposeTempBlendedFontATM(). 
  541.  * Don't expect the name of the font to be what you gave it, we may change it for internal reasons.
  542.  */ 
  543. ATMErr createTempBlendedFontATM(short numAxes, Fixed *coords, short *useFondID);
  544. ATMErr disposeTempBlendedFontATM(short fondID);
  545.  
  546. /*
  547.  * Create a permanent blended font, of a given size in the given font file. 
  548.  * Note that the zero-sized case is the only one supported, which will create a "dummy" 
  549.  * 10 point font.
  550.  */
  551. ATMErr createPermBlendedFontATM(StringPtr fontName, short fontSize, short fontFileID, short *retFondID);
  552. ATMErr disposePermBlendedFontATM(short fondID);
  553.  
  554. /*
  555.  * We store newly created fonts in a temporary file. If you wish to use it (ie, for the 
  556.  * above routines), feel free.
  557.  */
  558. ATMErr getTempBlendedFontFileIDATM(short *fileID);
  559.  
  560. /*
  561.  * Given the family name (eg. "Minion") and axis ID, return the number of axes.
  562.  */
  563. ATMErr getNumAxesATM(short *numAxes);
  564.  
  565. /*
  566.  * Get the number of base designs (useful for the "CopyFit" routine, below).
  567.  */
  568. ATMErr getNumMastersATM(short *numMasters);
  569.  
  570. /*
  571.  * Get the i'th base design for the given multiple master font (useful for the "CopyFit"
  572.  * routine, below).
  573.  */
  574. ATMErr getMasterFONDATM(short i, short *masterFOND);
  575.  
  576. /*
  577.  * Used to choose a multiple-master instance that will match the given widths.
  578.  * First, fill in the baseWidths array with the width of the string for each one of
  579.  * the base designs. Then choose a method for us to follow (default, constantStems, varStems).
  580.  * Give us the targetWidth you want your string and the "beginDesign", which says what your
  581.  * original coords were. We will return the best fit we could find in resultDesign, and
  582.  * the actual width in resultWidth.
  583.  */
  584. ATMErr copyFitATM(short method, Fixed TargetWidth, Fixed *beginDesign,
  585.                     Fixed *baseWidths, Fixed *resultWidth, Fixed *resultDesign);
  586.  
  587. /*
  588.  * This extends previous "ShowText" calls so that we can display strings without ever
  589.  * creating an explicit FOND (eventually). For the moment, "fontFamily" is ignored, and
  590.  * should be passed NULL (this is for future expansion).  Pass NULL for "coords" unless
  591.  * this is a multiple master font. If "displacements" is NULL then we use the widths from
  592.  * the FOND/NFNT; otherwise "displacements" gives us the x and y deltas between each
  593.  * character.
  594.  */
  595. ATMErr showTextDesignATM(StringPtr fontFamily, Byte *text, short len, ATMFixedMatrix *matrix,
  596.                 Fixed *coords, Fixed *displacements, short *lenDisplayed);
  597.  
  598. /*
  599.  * Given the family name (eg. "Minion") and axis ID, return information about the axis.
  600.  * Axis numbers start with 1.
  601.  *         userMin, userMax -    Lowest and highest values allowed on this axis.
  602.  *        axisType -            Type of axis. Examples are "Weight" for the weight axis and
  603.  *                            "Width" for the axis modifying width.
  604.  *        axisLabel -            What to label the axis (eg. "Weight").
  605.  *        numSubranges -        How many labels for subranges there are (ie. Light, Medium, Bold).
  606.  * NOTE: passing NULL for any of the parameters ignores that parameter. Thus you don't always
  607.  * have to get ALL the information if you only want a little.
  608.  */
  609. ATMErr getAxisBlendInfoATM(short axis, short *userMin, short *userMax, StringPtr axisType,
  610.                     StringPtr axisLabel, StringPtr axisShortLabel);
  611.  
  612. /*
  613.  * Get the specifications about the current font; this information can be used with
  614.  * fontFitATM(), below.
  615.  */
  616. ATMErr getFontSpecsATM(FontSpecs *specs);
  617.  
  618. /*
  619.  * This routine does some amazing calculations, and is the center of the code for dealing
  620.  * with copyfitting and other of the fancier multiple master operations. The current font
  621.  * and the "origCoords" is given to, for example, adjust a line typed in a multiple master
  622.  * typeface so that it exactly matches a given set of dimensions; here we will use string length
  623.  * and stem width.
  624.  *
  625.  * The numTargets is 2 (one for string length and one for stem width). The first entry in
  626.  * "targetMetrics" is the length you want the text to be (ie. the width of a column), and the
  627.  * second what you want the stem width to be (get this information from getFontSpecsATM(), above).
  628.  * The first entry in masterMetrics is a pointer to the widths of the strings at each master
  629.  * design (loop through the masters using getMasterFONDATM()). The second entry in masterMetrics
  630.  * is the stemwidths for each master design. fontFitATM tries to find the closest match
  631.  * possible by adjusting the axes given in varyAxes, and returns the results in retCoords
  632.  * and retWeightVector--if either argument is NULL, it is ignored. To get the axis id's, use
  633.  * getAxisBlendInfoATM and look for the "axisType". A list of type strings will be given (soon?).
  634.  */
  635. ATMErr fontFitATM(Fixed *origCoords, short numTargets, short *varyAxes,
  636.                 Fixed *targetMetrics, Fixed **masterMetrics,
  637.                 Fixed *retCoords, Fixed *retWeightVector);
  638.  
  639. /*
  640.  * There are a number of font instances for each multiple-master family that have been
  641.  * "blessed" by our Type group to go well together. The font names for this group can be
  642.  * gotten through the following calls: getNumBlessedFonts, getBlessedFontName, and
  643.  * getRegularBlessedFont. Most applications will not need these calls....
  644.  *
  645.  * getNumBlessedFontsATM() finds how many "blessed" fonts exist.
  646.  */
  647. ATMErr getNumBlessedFontsATM(short *numBlessedFonts);
  648.  
  649. /*
  650.  * Get the nth "blessed" font name (see above discussion). "i" is indexed from 1.
  651.  */
  652. ATMErr getBlessedFontNameATM(short i, StringPtr blessedFontName, Fixed *coords);
  653.  
  654. /*
  655.  * When Adobe Illustrator and Adobe Type Reunion display a list of instances for a
  656.  * multiple master family, a "reasonable" choice for the default is chosen. The choice
  657.  * is given by this call. Essentially, this finds the equivalent of "Helvetica Regular"
  658.  * for multiple master fonts.
  659.  *
  660.  * The returned value "regularID" is to be used as input to getBlessedFontName.
  661.  */
  662. ATMErr getRegularBlessedFontATM(short *regularID);
  663.  
  664. /*
  665.  * This flushes ATM's font cache. This is basically the counterpart for System 7's
  666.  * FlushFonts function.
  667.  */
  668. ATMErr flushCacheATM(void);
  669.  
  670. /*
  671.  * When using many of the above calls for working with multiple master fonts, ATM
  672.  * expects the current font to be set to a font in the font family. What happens if
  673.  * you only have a font family name?  This routine will return a fondID that is usable
  674.  * to handle information for that font family.
  675.  */
  676. ATMErr getFontFamilyFONDATM(StringPtr familyName, short *retFondID);
  677.  
  678. /*
  679.  * Multiple Master Font Picker/Creator interface.
  680.  *
  681.  * This call displays a dialog allowing the user to navigate through the
  682.  * design space of any installed Multiple Master font and to pick and/or
  683.  * create an instance within that design space.  The caller receives
  684.  * information about the user's selection, if any.
  685.  *
  686.  * See MMFP_Parms and MMFP_Reply definitions, above, for a full description.
  687.  */
  688. ATMErr MMFontPickerATM( MMFP_Parms *parms, MMFP_Reply *reply );
  689.  
  690. /* Used internally by ATM, don't use.  */
  691. void disableATM(void);
  692. void reenableATM(void);
  693.  
  694. /* ****************************** end of ATMProcs5Version routines ****************************** */
  695.  
  696. #endif    /* _H_ATMInterface */
  697.